package org.cytoscape.myapp.my_cyaction_app.internal;

import java.awt.Component;
import java.awt.FlowLayout;
import java.util.List;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Collection;

import org.cytoscape.model.CyNetworkManager;

import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JPanel;

import org.cytoscape.application.CyApplicationManager;
import org.cytoscape.application.swing.CytoPanelComponent;
import org.cytoscape.application.swing.CytoPanelName;
import org.cytoscape.model.CyColumn;
import org.cytoscape.model.CyNetwork;
import org.cytoscape.model.CyNode;
import org.cytoscape.model.CyTable;
import org.osgi.framework.BundleContext;
import org.cytoscape.view.model.CyNetworkViewFactory;
import org.cytoscape.view.model.CyNetworkViewManager;


//COMO PODER PONER ESTA LIBRERIA ES LO QUE ME FALTA PARA QUE FUNCIONE EL HIDE

//import org.cytoscape.task.hide;


public class MyCytoPanel extends JPanel implements CytoPanelComponent {

    private final String Title = "Panel de Prueba";
    private CyNetwork currentNetwork;
    private MyNetwork RedDePrueba;
    private CyNetwork RedSoloPrueba;
	protected JButton boton;
	protected CyNetworkManager networkManager;
    
    
    public MyCytoPanel(CyApplicationManager nmg, MyNetwork myNet, CyNetworkManager networkManager){
    	this.currentNetwork = nmg.getCurrentNetwork();
    	this.RedDePrueba = myNet;
    	RedSoloPrueba = null;
    	this.networkManager = networkManager;
    }
   
	
    @Override
    public CytoPanelName getCytoPanelName() {
        return CytoPanelName.WEST;
    }
    
    
	@Override
	public Component getComponent() {
		final JComboBox<String> attrNodesEdad = new JComboBox<String>();
		attrNodesEdad.setVisible(false);
	/*
	 * PRUEBA CARGAR ATRIBUTOS EN COMBO BOX	
	 */
		final JComboBox<String> attrNodes = new JComboBox<String>();
		CyTable table = currentNetwork.getDefaultNodeTable();
		Collection<CyColumn> columnas = table.getColumns();
		for (CyColumn col:columnas) {
			attrNodes.addItem((String)col.getName());
		}
		
         JPanel contenedorPrincipal = new JPanel();
         
         
         // PROBANDO
         attrNodesEdad.setLocation(25, 25);
         attrNodesEdad.putClientProperty("JComponent.sizeVariant", "medium");
		 contenedorPrincipal.add((JComboBox<String>)attrNodesEdad);
		 
		 
		 
		 attrNodes.putClientProperty("JComponent.sizeVariant", "small");
		 contenedorPrincipal.add((JComboBox<String>)attrNodes);
		 
		 contenedorPrincipal.setLayout(new FlowLayout());
		 contenedorPrincipal.setName("Contenerdor Principal");
		 contenedorPrincipal.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
		 
		 
		 /*
		 * PRUEBA GENERAR ACCION
		  */
		 boton = new JButton("Apretar");
		 boton.setBounds(10,50,100,30);// se cambio 10 por 50
		 
	// ----Le agregamo cual va a ser la accion que va a realizar---------
		 
		 boton.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
				//JOptionPane.showMessageDialog(null, attrNodes.getSelectedItem().toString());
					int cantNodos = currentNetwork.getEdgeCount();
					JOptionPane.showMessageDialog(null, cantNodos);
				}
			});;
			
			/*
			 * CyTable table = currentNetwork.getDefaultNodeTable();
				Collection<CyColumn> columnas = table.getColumns();
				for (CyColumn col:columnas) {
			attrNodes.addItem((String)col.getName());
			 * */
		 
	//-----Lo agregamos al panel para que se pueda ver-----------------------
		 
		 contenedorPrincipal.add(boton);
	
	//-------------------------
				/*
			 * CyTable table = currentNetwork.getDefaultNodeTable();
				Collection<CyColumn> columnas = table.getColumns();
				for (CyColumn col:columnas) {
			attrNodes.addItem((String)col.getName());
			 * */
		 attrNodes.addActionListener(new ActionListener() {
				@Override
				public void actionPerformed(ActionEvent e) {
					if(attrNodes.getSelectedItem().toString()== "name"){
						attrNodesEdad.setVisible(false);
						JOptionPane.showMessageDialog(null, "sal");
					}
						
					if(attrNodes.getSelectedItem().toString()== "edad"){
						
						RedSoloPrueba = RedDePrueba.getNewNetworkByAttribute(attrNodes.getSelectedItem().toString());
				
						//networkManager.addNetwork(RedDePrueba.getNewNetworkByAttribute(attrNodes.getSelectedItem().toString()));
						
						JOptionPane.showMessageDialog(null, "SALE");
						
						
						//filtrarXAtributo(attrNodesEdad, "edad");
					/*CyTable table = RedSoloPrueba.getDefaultNodeTable();
						List<CyNode> lista = RedSoloPrueba.getNodeList();
							for (CyNode lis:lista){
								//OBTENGO EL ATRIBUTO REFERENCIADO CON LA EDAD, SE DEBE HACER MAS DINAMICO SIN PONER EDAD
								JOptionPane.showMessageDialog(null,lis.getSUID().toString());
							//JOptionPane.showMessageDialog(null, table.getRow(lis.getSUID()).getRaw("NAME").toString());
							}*/
					
				}						
					if(attrNodes.getSelectedItem().toString()== "ciudad"){
						attrNodesEdad.setVisible(false);
						JOptionPane.showMessageDialog(null, attrNodes.getSelectedItem().toString());
					}
				
			}
		 });
		 /*
		  * PARA AGREGAR ELEMENTOS AL PANEL SE DEBERA AGREGAR EL COMPONENTE CON LA SIGUIENTE LINEA
		  * 
		  *  contenedorPrincipal.Add(componenteQueQueresAgregar);
		  */
		
		//return cont; 
		return contenedorPrincipal; 
	}

	@Override
	public Icon getIcon() {
		return null;
	}

	@Override
	public String getTitle() {
		return Title;
	}
 
	//
	public void filtrarXAtributo(JComboBox<String>attrNodesEdad, String dato){
		CyTable table = currentNetwork.getDefaultNodeTable();
		List<CyNode> lista = currentNetwork.getNodeList();
			for (CyNode lis:lista){
				//OBTENGO EL ATRIBUTO REFERENCIADO CON EL DATO QUE DESCEO.
				attrNodesEdad.addItem(table.getRow(lis.getSUID()).getRaw(dato).toString());
			}
	}
	//Pasamos el String del atributo del nodo y aplicamos el hide para ocultar el nodo
	public void esconderNodos(String dato){
		/*CyTable table = currentNetwork.getDefaultNodeTable();
		List<CyNode> lista = currentNetwork.g;
			for (CyNode lis:lista){
				//OBTENGO EL ATRIBUTO REFERENCIADO CON EL DATO QUE DESCEO.
				if (table.getRow(lis.getSUID()).getRaw(dato).toString()== "dato"){
					 // hide a node
    					//cyNetwork.hideNode(node1.getRootGraphIndex());
    
				}
			}*/
		
	}
	
	public void recuperarNodosEscondidos(){
		
		
	}
	/*
	LISTO
	tengo que ver como puedo obtener la edad como para filtrar por 15
	
	IGUAL A LO DE ARRIBA VER COMO HACERLO DINAMICO
	lo mismo para el nombre y ciudad a ver si me filtra,
	y luego ver como los puedo visualizar tanto como que se cree una nueva red
	
	LISTO
	como para que se modifique la existente
	*/
	
	
}